﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using StyleMVVM.Data;
#if DOT_NET

#else
using Windows.Foundation;
using Windows.Foundation.Metadata;

#endif

namespace StyleMVVM.View.Regions
{
	public interface IRegionAdapter
	{
		Type AddapterType { get; }

		IEnumerable<object> GetCurrentExports(IRegion region, object control);

#if NETFX_CORE
		IAsyncOperation<bool> Activate(IRegion region, object control, string newExport);

		IAsyncOperation<bool> Deactivate(IRegion region, object control, string newExport);

		IAsyncOperation<bool> Navigate(IRegion region, object control, string newExport, object navigationParameter);

		[DefaultOverload]
		IAsyncOperation<bool> Add(IRegion region, object control, string newExportName, object navigationParameter);

		IAsyncOperation<bool> Add(IRegion region, object control, object newExport, object navigationParameter);

		[DefaultOverload]
		IAsyncOperation<bool> Remove(IRegion region, object control, string oldExportName);

		IAsyncOperation<bool> Remove(IRegion region, object control, object oldExport);
#else
		Task<bool> Activate(IRegion region, object control, string newExport);

		Task<bool> Deactivate(IRegion region, object control, string newExport);

		Task<bool> Navigate(IRegion region, object control, string newExport, object navigationParameter);

		[DefaultOverload]
		Task<bool> Add(IRegion region, object control, string newExportName, object navigationParameter);

		Task<bool> Add(IRegion region, object control, object newExport, object navigationParameter);

		[DefaultOverload]
		Task<bool> Remove(IRegion region, object control, string oldExportName);

		Task<bool> Remove(IRegion region, object control, object oldExport);
#endif
	}
}